
import json

import allure
from jsonpath import jsonpath
from tools.handle_global_data import HandleGlobalData
from tools.handle_logs import mylog

class HandleExtract:
    """
    1、读取excel中extract_data字段
    2、通过extract_data字段的key获取到对应的提取表达式，根据提取表达式去响应
    中提取对应的数据
    3、提取到数据之后，将这个数据设置为全局变量(动态设置类属性)
    {"access_token":"$..access_token","success":"$..success"}
    """
    #数据提取
    @allure.step("从响应结果中提取数据")
    def handle_extract(self,extract_data:str,response:dict):
        mylog.info(f"response：{response}\nextract:{extract_data}")
        if extract_data:
            extract_data = extract_data if isinstance(extract_data,dict) else json.loads(extract_data)
            for key,value in extract_data.items():
                val = jsonpath(response,value)[0]
                #另外创建一个类来存类属性
                setattr(HandleGlobalData,key,val)
        else:
            mylog.info("excel中extract_data字段为空，不需要提取全局变量")
